<?php
// 应用公共文件


use app\common\exception\BusinessException;
use app\common\model\UserVip;
use app\common\service\GlobalsVariableService;
use app\common\service\UserService;
use app\common\service\WxService;
use think\facade\Config;
use think\Request;

/**
 * getRandAvatar
 * @return string
 */
function getRandAvatar(): string
{
    $config = Config::get('mcp.default_avatar');
    $min = $config['file_name_min'];
    $max = $config['file_name_max'];
    $num = mt_rand($min, $max);
    $fileHost = Config::get('mcp.fileHost');
    return $fileHost . $config['path'] . $num . $config['postfix'];
}

/**
 * getRandNickname
 * @return string
 */
function getRandNickname()
{
    // 内置的昵称列表，涵盖多种风格，与学习和知识相关
    $nicknames = [
        // 励志风格
        "学海无涯", "知识先锋", "勤奋小达人", "努力必胜", "梦想学者",
        "智慧之星", "博学多才", "勤奋小书虫", "学习小能手", "知识狂魔",
        "学无止境", "求知若渴", "勤奋小战士", "知识探索者", "学习小天才",
        "智慧小达人", "勤奋小书虫", "知识小巨人", "学习小标兵", "智慧小精灵",

        // 文艺风格
        "墨香书韵", "诗意学海", "书香雅韵", "墨韵流芳", "文心雕龙",
        "诗书传家", "墨海弄潮", "文采风流", "墨香四溢", "书海泛舟",
        "墨韵生香", "文心雕玉", "诗书继世", "墨海扬帆", "文采风华",

        // 可爱风格
        "学习小萌兔", "知识小天使", "学习小猫咪", "智慧小熊", "知识小精灵",
        "学习小绵羊", "知识小蝴蝶", "学习小熊猫", "智慧小兔子", "知识小猫咪",

        // 搞笑风格
        "学渣逆袭", "知识大胃王", "学习小怪兽", "知识小霸王", "学习小能手",
        "知识小怪兽", "学习小怪兽", "知识小霸王", "学习小能手", "知识小怪兽",

        // 省份风格
        "京韵学士", "沪上书生", "粤海才子", "川蜀学神", "苏韵学童",
        "浙里学侠", "湘江学友", "闽南学郎", "皖江学妹", "赣鄱学弟",
        "鲁韵学长", "豫章学妹", "琼岛学童", "滇池学友", "黔山学郎",
        "桂海学士", "琼崖学侠", "陕北学神", "晋阳学妹", "蒙学小达人",

        // 城市风格
        "京味书生", "魔都学神", "羊城学友", "蓉城学童", "苏城学侠",
        "杭韵学郎", "星城学妹", "鹭岛学弟", "徽韵学长", "赣江学妹",
        "齐鲁学童", "豫章学侠", "椰城学神", "春城学友", "筑城学郎",
        "邕城学士", "琼崖学侠", "陕北学童", "并州学妹", "青城学弟",

        // 其他风格
        "智慧小达人", "勤奋小书虫", "知识小巨人", "学习小标兵", "智慧小精灵",
        "学习小天才", "知识小天使", "学习小猫咪", "智慧小熊", "知识小精灵",
        "学习小兔子", "知识小天使", "学习小猫咪", "智慧小熊", "知识小精灵",
        "学习小绵羊", "知识小蝴蝶", "学习小熊猫", "智慧小兔子", "知识小猫咪",
        "学习小怪兽", "知识小霸王", "学习小能手", "知识小怪兽", "学习小怪兽",

        // 自嘲幽默风
        "学渣の逆袭",
        "知识乞丐",
        "挂科边缘人",
        "预习刺客",
        "知识负债者",

        // 文艺隐喻风
        "墨水蒸发者",
        "纸间拾荒者",
        "思维拓扑师",
        "语法流浪者",
        "公式拾穗人",

        // 职业幻想风
        "诺贝尔预备役",
        "硅谷实习生",
        "华尔街学徒",
        "联合国翻译官",
        "诺奖陪跑员",

        // 中二热血风
        "知识暴君",
        "题海龙王",
        "错题征服者",
        "脑力核爆",
        "认知革命家",

        // 生活化吐槽风
        "咖啡因依赖症",
        "草稿纸囤积狂",
        "图书馆钉子户",
        "错题本收藏家",
        "知识消化不良",

        // 抽象符号风
        "∫知识∂x",
        "404_Not_Found",
        "Ctrl+Z人生",
        "π的无限不循环",
        "∞脑洞加载中"
    ];

    // 随机返回一个昵称
    return $nicknames[array_rand($nicknames)];
}

/**
 * fillUserAvatar
 * @param string $avatar
 * @return string
 */
function fillUserAvatar(string $avatar): string
{
    if (strpos($avatar, 'http') !== false) {
        return $avatar;
    }
    $apiHost = Config::get('mcp.apiHost');
    return $apiHost . $avatar;
}

/**
 * fillUserSignature
 * @param bool $is_vip
 * @return string
 */
function fillUserVipAvatar(bool $is_vip): string
{
    $fileHost = Config::get('mcp.fileHost');
    $filePath = $fileHost . '/app_img/';
    return $is_vip ? $filePath . 'user_lv_2.png' : $filePath . 'user_lv_1.png';
}

/**
 * appIsAudit
 */
function appIsAudit(): bool
{
    // 检查客户端版本和服务端版本是否一致
    $nowAppVersion = GlobalsVariableService::get('appVersion');
    $appVersion = Config::get('mcp.appVersion');
    $standardAppIsAudit = $nowAppVersion === $appVersion;

    // 非微信小程序渠道跳过
    $appPlatform = GlobalsVariableService::get('appPlatform');
    if (!$appPlatform) {
        throw new BusinessException('未知平台');
    }
    if (!in_array($appPlatform, [20, 21, 40, 41])) {
        return false;
    }

    // 未登录匹配正常审核判断
    $userId = app(app\api\Request::class)->param('userId');
    if (!$userId) {
        return $standardAppIsAudit;
    }

    // 白名单跳过检查
    $userService = new UserService();
    $userInfo = $userService->getUserById($userId, '*');
    if ($userInfo && $userInfo['whitelist'] == 1) {
        return false;
    }

    // 其他全部匹配正常审核判断
    return $standardAppIsAudit;
}

/**
 * checkSafeByWxCode
 * @param $appId
 * @param $wxCode
 * @return string
 * @throws BusinessException
 */
function checkSafeByWxCode($appId, $wxCode): string
{
    $wx = new WxService();
    $wx->setAppId($appId);
    try {
        $wxInfo = $wx->getUserInfoByCode($wxCode);
        return $wxInfo['openid'] ?? '';
    } catch (Exception $exception) {
        throw new BusinessException('您的网络环境异常,请重试');
    }
}

/**
 * isIos
 * @return bool
 */
function isIos(): bool
{
    // 真实检测
    $http_user_agent = strtolower($_SERVER['HTTP_USER_AGENT']);
    if (strpos($http_user_agent, 'iphone') !== false) {
        return true;
    }
    if (strpos($http_user_agent, 'ipad') !== false) {
        return true;
    }
    if (strpos($http_user_agent, 'ipod') !== false) {
        return true;
    }
    return false;
}

/**
 * 是否小程序环境
 * @return bool
 */
function isWxMcp(): bool
{
    $appPlatform = GlobalsVariableService::get('appPlatform');
    if (in_array($appPlatform, [20, 21])) {
        return true;
    }
    return false;
}

/**
 * 是否小程序手机版
 * @return bool
 */
function isMobileWxMcp(): bool
{
    $appPlatform = GlobalsVariableService::get('appPlatform');
    return $appPlatform == 20;
}

/**
 * 是否小程序电脑版
 * @return bool
 */
function isPcWxMcp(): bool
{
    $appPlatform = GlobalsVariableService::get('appPlatform');
    return $appPlatform == 21;
}

/**
 * 是否H5
 * @return bool
 */
function isH5(): bool
{
    $appPlatform = GlobalsVariableService::get('appPlatform');
    return $appPlatform == 10 || $appPlatform == 11;
}

/**
 * 是否app
 * @return bool
 */
function isApp()
{
    $appPlatform = GlobalsVariableService::get('appPlatform');
    return $appPlatform == 30;
}

/**
 * 是否虚拟支付
 * @return bool
 */
function isIosVirtualPay(): bool
{
    // 是否IOS设备
    $isIos = isIos();
    if (!$isIos) {
        return false;
    }

    // IOS_APP非虚拟支付
    if (isApp()) {
        return false;
    }

    // IOS_H5非虚拟支付
    if (isH5()) {
        return false;
    }

    // 是否微信小程序PC终端
    $isMobileWxMcp = isPcWxMcp();
    if ($isMobileWxMcp) {
        return false;
    }

    // 用户属于白名单则正常支付
    $userId = app(app\api\Request::class)->param('userId', 0);
    if ($userId) {
        $isWhiteUser = app(UserService::class)->isWhiteUser($userId);
        if ($isWhiteUser) {
            return false;
        }
    }

    // 属于虚拟支付
    return true;
}

/**
 * getAuthorization
 * @return mixed|string
 */
function getAuthorization()
{
    $request = app(Request::class);
    $header = $request->header();
    $token = $header['token'] ?? '';
    if ($token) {
        return $token;
    }
    $authorization = $header['authorization'] ?? '';
    if ($authorization) {
        return $authorization;
    }
    return '';
}

/**
 * isVip
 * @return bool
 */
function isVip(): bool
{
    $userId = app(app\api\Request::class)->param('userId', 0);
    if (!$userId) {
        return false;
    }
    return app(UserVip::class)->checkIsVip($userId);
}
